From: Giovanni Campagna Date: Sun, 15 May 2011 17:31:02 +0000 (+0200) Subject: KeyboardStatus: disambiguate duplicate short descriptions X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~7899 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f99b4da4ecfbe5aa3b8853f514a866e22531d9ae;p=gnome-shell.git KeyboardStatus: disambiguate duplicate short descriptions If two layouts have the same short description (for example, english (US) and english (dvorak)), add a subscript for disambiguating among them. https://bugzilla.gnome.org/show_bug.cgi?id=650128 --- diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js index 1db0d8286..7b425a434 100644 --- a/js/ui/status/keyboard.js +++ b/js/ui/status/keyboard.js @@ -79,6 +79,28 @@ XKBIndicator.prototype = { }); }, + _adjust_group_names: function(names) { + // Disambiguate duplicate names with a subscript + // This is O(N^2) to avoid sorting names + // but N <= 4 so who cares? + + for (let i = 0; i < names.length; i++) { + let name = names[i]; + let cnt = 0; + for (let j = i + 1; j < names.length; j++) { + if (names[j] == name) { + cnt++; + // U+2081 SUBSCRIPT ONE + names[j] = name + String.fromCharCode(0x2081 + cnt); + } + } + if (cnt != 0) + names[i] = name + '\u2081'; + } + + return names; + }, + _sync_config: function() { this._showFlags = this._config.if_flags_shown(); if (this._showFlags) { @@ -101,7 +123,7 @@ XKBIndicator.prototype = { for (let i = 0; i < this._labelActors.length; i++) this._labelActors[i].destroy(); - let short_names = this._config.get_short_group_names(); + let short_names = this._adjust_group_names(this._config.get_short_group_names()); this._selectedLayout = null; this._layoutItems = [ ];